/*
							Copyright (C) 2010  Alourien Team
									
						This file is part of the Alourien Engine.

    The Alourien Engine is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    The Alourien Engine is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with the Alourien Engine.  If not, see <http://www.gnu.org/licenses/>.
	
 *File Name:Matrix2D.h
 *Programmer Name:Jose Castellano
 *Date of Last Update: 10/18/2010
 *
 *Purpose:This Program is to create a two dimensional 
 * Matrix to be used in later programs
 *
 *Basic Info:It includes the Matrix set function 
 *which allows to set all two values at once.
 *
 *UPDATES:
 *1)Created the Program and documentation.
 *  Date:10/18/2010 Updater: Jose Castellano
 *
 *2) Added MatrixMath as a friend class
 *  Date:10/27/2010 Updater: Manuel Cuellar
 *
 *
 */

#ifndef _MATRIX2D_H
#define _MATRIX2D_H 1

namespace Alourien
{
	class Matrix2D
	{
		friend class MatrixMath;
	private:
		float matArray[3][3];// the actual matrix body

	public:
		Matrix2D(void);
		~Matrix2D(void);     

		//Creates the Identity matrix that will be used later on
		void MakeIdentity();
		
		//This function is to get the values and set them into the matrix
		//It allows for a faster initialization, rather than setting in the main
		//using two lines of code.
		void MatrixSet(float xValue, float yValue);
		
		//Overload of the + operator but for 2 Dimensional Matrix
		//Returns a 2 dimensional Matrix
		Matrix2D operator+(const Matrix2D& matrix2) const;
		
		//Overload of the * operator but for 2 Dimensional Matrix
		//Returns a 2 dimensional Matrix
		Matrix2D operator*(const Matrix2D& matrix2) const;

	};
};

#endif 